Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[이성 검색] 사용자는 이성을 검색할 수 있다.(#54) #88

Merged
merged 198 commits into from
May 28, 2024

Conversation

Minjae-An
Copy link
Contributor

작업 대상

  • 이성 검색 로직

📄 작업 내용

  • 이성 검색 비즈니스 로직 및 API 구성
  • 연관 로직 수정

🙋🏻 주의 사항

이성 검색 API가 @PostMapping인 이유

  • 이성 검색시 검색 내역을 저장하는 작업이 수반됨
  • 서버의 상태를 변경하는 작업이 수반되므로 @GetMapping으로 표현하는 것은 적절치 않다 판단
  • 같은 맥락의 사유에서 추천 이성 조회 API 또한 @PostMapping으로 변경

📎 관련 이슈

레퍼런스

Minjae-An added 30 commits March 9, 2024 17:16
보낼 화살 수를 담은 요청 DTO 정의
- 화살 송수신 내역 repository 정의
- 보낸 사용자, 받은 사용자를 통해 내역 존재 여부를 확인하는 로직 구현
보낸 사용자, 받은 사용자를 통해 송수신 내역 존재 여부를 확인하는
로직 구현
다음 상황들에 대한 예외 enum을 정의하였다.
- 자기 자신에게 화살을 보내는 경우
- 이미 화살을 보낸 사용자인 경우
- 가진 화살 수가 부족해 화살을 보낼 수 없는 경우
감소하려는 화살 수가 사용자가 보유한 화살 수보다 클 경우 예외 발생
화살 보내기 비즈니스 로직은 다음 과정을 거친다.
1. 자기 자신에게 화살을 보내는 상황 검증
2. 화살을 보낸 사용자에게 또 보내는 상황 검증
3. 화살 내역 저장
4. 보내는 사용자 화살 감소, 화살이 부족할 경우 예외 발생(과정 3 롤백)
5. 받는 사용자 화살 증가
- query, command를 service, repository를 중개하는 별도의 계층을 통해 구분
- 이에 따라 기존 command repository 삭제
- 기존 command repository 사용 위치, 화살 command로 대체
# Conflicts:
#	be/src/main/java/yeonba/be/arrow/repository/ArrowCommand.java
#	be/src/main/java/yeonba/be/arrow/service/ArrowService.java
#	be/src/main/java/yeonba/be/exception/CommonException.java
#	be/src/main/java/yeonba/be/user/entity/User.java
서로 대치되는 작업을 수행하는 상황을 잘 표현할 수 있도록 메서드 이름 수정
- 이미 화살을 보낸 사용자 예외
- 화살이 부족하여 화살을 보낼 수 없는 예외
가독성 향상을 위해 간단한 이름을 수정
dev 브랜치 작업 내역 병합에 따른 코드 배치 수정
좀 더 명확하게 대치되는 의미를 나타낼 수 있도록 화살을 받는
사용자 ID 파라미터 이름을 receiverId로 수정
- 이름 칼럼 추가
- 테스트시 활용 가능한 생성자 추가
- 래퍼 타입 필드들 기본 타입으로 변경
- 프로필 사진 URL 리스트 필드 추가
- 사용자가 가진 총 화살 수 필드 추가
- 음주 성향, 흡연 성향 필드 추가
- 코드 정렬
- 레퍼런스 타입 not null 필드들, Column 어노테이션 사용 명시
- salt 필드 추가
- 생성 일시, 최종 수정 일시 필드 추가
- JpaAuditing 활용, 생성/최종 수정 일시 필드들 엔티티 저장시 자동 설정
- 새로운 생성자 구성
프로필을 조회하는 사용자 ID의 경우 상대방이 화살을 보넀던 사용자인지
확인하기 위해 파라미터로 받는다.
- 요구사항 변경에 따라 음주 성향, 흡연 성향 필드 삭제
- 성별 정보 제공 메서드 추가
- 음주 성향, 흡연 성향 필드 삭제
- 성별 필드 추가
- 음주 성향, 흡연 성향 필드 삭제
- 생성자 성별 필드 설정 로직 수정
- 코드 정렬
- 음주 성향, 흡연 성향 삭제
- 성별 정보 응답에 포함토록 수정
- 코드 정렬
Minjae-An added 17 commits May 16, 2024 16:04
- 사용자 ID, 성별을 함께 전달받기 위해 엔티티를 파라미터로 받도록 수정
- 검색일 파라미터 변수명 수정
- 페이지 번호 필드 nullable 하게 변경, 검증 제약 수정
- 나이/키 상한 및 하한 범위 검증 제약 추가
- 이성 검색 메서드명 변경
- 이성 검색 메서드 파라미터명, 타입 변경
- 이성 검색 조건에 같은 성별 사용자 제외 조건 추가
- 화살 내역 존재 여부 확인 쿼리에 사용자간 송수신 타입 조건 추가
- 하한/상한 범위 조건 생성 로직 별도 분리
- 여러 비즈니스 로직에서 사용되는 한계값 검증 로직 별도 분리
- 래퍼 타입의 하한/상한이 둘 다 존재할 경우 하한 <= 상한 여부 검증
- 페이지 번호 nullable하게 변경, 기본 첫 페이지(0)
- 검색하는 사용자 조회 로직 추가
- 검색 나이/키 하한,상한 검증 로직 추가
사용자 엔티티 파라미터를 통해 사용자 ID, 성별을 제공받도록 수정
- 응답에 포함된 사용자들 조회 로직, 별도 분리
- 추천 이성 조회 로직 변경에 따라 사용 위치 수정
- 이성 검색 메서드명 변경
query parameters로 요청 DTO를 매핑하는 구조에서는 필드 존재
유무와 상관 없이 DTO가 생성되지만 request body를 통해 매핑하는
경우 request body 자체가 존재하지 않을 수 있기 때문에 요청 DTO
null 여부 검증 추가
- 추천 이성 조회, 이성 검색 API의 경우 요청시 내역 저장 작업 수행
- 서버의 상태를 변경하는 작업이 수반되므로 GET으로 표현하기 부적절, POST로 변경
@Minjae-An Minjae-An added the ✨ feat 새로운 기능 추가 label May 18, 2024
@Minjae-An Minjae-An requested a review from acceptor-gyu May 18, 2024 12:43
@Minjae-An Minjae-An self-assigned this May 18, 2024
@Minjae-An Minjae-An linked an issue May 18, 2024 that may be closed by this pull request
Copy link
Contributor

@acceptor-gyu acceptor-gyu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

따로 요청 드린 부분 해주시면 감사하겠습니다.
그리고 사용하신 querydsl 관련 내용에 대해서 설명해주시면 감사하곘습니다. (ex. JPQLQuery, Expressions.allof() )

Minjae-An added 6 commits May 20, 2024 14:39
- 이성 검색 조건, BooleanExpression을 통해 구성되도록 수정
- 나이/키 범위 조건, BooleanExpression 이용하도록 수정
- 같은 성별 사용자 제외 조건, 별도 메서드로 분리
- 선호 동물상 포함 조건 형성 로직 ,별도 메서드로 분리
페이지 번호 존재 여부, 하한/상한 값 검증을 DTO가 존재할 경우
함께 수행하도록 잘못된 로직 변경
@Minjae-An Minjae-An merged commit f167aa6 into dev May 28, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ feat 새로운 기능 추가
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BE] 이성 검색 비즈니스 로직 및 API 구성
2 participants